﻿/**
 * Proyecto: Cognitum
 * Global IT Services 2008
 * @author Esanantonio
 */

////Tramite Aseg
Cognitum.Mensajeria.SolicitudMensajeria.Administracion = Ext.extend(Karma.FB, {

    initComponent: function() {

        Ext.apply(this, {
            title: 'Administracion',
            items: [{
                fieldLabel: 'Ruta',
                name: 'Ruta',
                entityName: 'Ruta',
                xtype: 'entity.link',
                allowBlank: true
            },
            {
                fieldLabel: 'Empresa Mensajería',
                name: 'EmpresaMensajeria',
                allowBlank: true
            },
            {
                fieldLabel: 'Numero Guía',
                name: 'NumeroGuia',
                allowBlank: true
            },
            {
                fieldLabel: 'Fecha Recepción',
                name: 'FechaRecepcion',
                xtype: 'datefield',
                allowBlank: true
            }
            ]
        });
        Cognitum.Mensajeria.SolicitudMensajeria.Administracion.superclass.initComponent.apply(this, arguments);
    }
    ,
    updateControls: function(value) {
        if (Ext.isEmpty(value)) {
            return;
        }        
        if (value.EstatusSolicitud == 6 || value.EstatusSolicitud == 7 || value.EstatusSolicitud == 8) {
            this.disable();
        }
    }
});
    Ext.reg('solmens.admin.frm', Cognitum.Mensajeria.SolicitudMensajeria.Administracion);


    Cognitum.Mensajeria.SolicitudMensajeria.Editor = Ext.extend(Karma.EBCard, {
        initComponent: function() {
            Ext.apply(this, {
                sections: [{
                    title: 'Solicitud Mensajería',
                    items: [{
                        fieldLabel: 'Folio',
                        name: 'Id',
                        disabled: true
                    }, {
                        xtype: 'fieldset',
                        checkboxToggle: false,
                        title: 'Fecha y horario de entrega',
                        autoHeight: true,
                        defaults: { width: 210 },
                        defaultType: 'textfield',
                        layout: 'table',
                        items: [{
                            fieldLabel: 'Fecha Solicitud de Entrega',
                            name: 'FechaSolicitud',
                            xtype: 'datefield',
                            hideLabel: false,
                            width: 170,
                            format: 'd/m/Y'
                        },
	                        {
	                            fieldLabel: 'Entregar de',
	                            name: 'HoraDesde',
	                            xtype: 'timefield',
	                            increment: 30,
	                            hideLabel: false,
	                            width: 80
	                        },
	                        {
	                            fieldLabel: 'Entregar Hasta',
	                            name: 'HoraHasta',
	                            xtype: 'timefield',
	                            increment: 30,
	                            hideLabel: false,
	                            width: 80
	                        }
                        ]
                    },
	                    {
	                        fieldLabel: 'Solicitante',
	                        name: 'UsuarioAdd',
	                        entityName: 'Usuario',
	                        xtype: 'entity.link',
	                        disabled: true
	                    }, {
	                        fieldLabel: 'Persona Moral',
	                        name: 'chkPMoral',
	                        xtype: 'checkbox',
	                        checked: true,
	                        listeners: {
	                            'check': {
	                                fn: this.check2,
	                                scope: this
	                            }
	                        }
	                    },
	                    {
	                        fieldLabel: 'Cliente',
	                        name: 'Cliente',
	                        entityName: 'Clientes',
	                        xtype: 'entity.link',
	                        allowBlank: true,
	                        hideMode: 'offsets'
	                    },
	                    {
	                        fieldLabel: 'Contacto',
	                        name: 'Contacto',
	                        entityName: 'Contacto Persona Moral',
	                        xtype: 'entity.link',
	                        contextTriggers: [{
	                            id: 'Cliente',
	                            query: 'p.PersonaMoral.Id = ?'
}],
	                            allowBlank: true,
	                            hideParent: true,
	                            hideMode: 'offsets'
	                        },
	                    {
	                        fieldLabel: 'Direccion',
	                        name: 'DireccionEntrega',
	                        entityName: 'Direcciones',
	                        xtype: 'entity.link',
	                        hideMode: 'offsets',
	                        contextTriggers: [{
	                            id: 'Cliente',
	                            query: 'p.Cliente.Id = ?'
}],
	                            allowBlank: true
	                        }, {
	                            xtype: 'fieldset',
	                            checkboxToggle: true,
	                            title: 'Cliente NO Registrado',
	                            autoHeight: true,
	                            defaults: { width: 210 },
	                            defaultType: 'textfield',
	                            collapsed: true,
	                            listeners: {
	                                'expand': {
	                                    fn: this.onExpand2,
	                                    scope: this
	                                },
	                                'collapse': {
	                                    fn: this.onCollapse2,
	                                    scope: this
	                                }
	                            },
	                            items: [{
	                                fieldLabel: 'Cliente',
	                                name: 'ClienteNoRegistrado',
	                                allowBlank: true
	                            }, {
	                                fieldLabel: 'Contacto',
	                                name: 'ContactoNoRegistrado',
	                                allowBlank: true
	                            }, {
	                                fieldLabel: 'Direccion',
	                                name: 'DireccionNoRegistrada',
	                                allowBlank: true
	                            }
                        ]
	                        },
                    {
                        fieldLabel: 'Prioridad',
                        name: 'PrioridadMensajeria',
                        xtype: 'enum.combo',
                        enumName: 'Cognitum.Dominio.Mensajeria.PrioridadMensajeriaEnum'
                    },
	                {
	                    fieldLabel: 'TipoMensajeria',
	                    name: 'TipoMensajeria',
	                    xtype: 'enum.combo',
	                    enumName: 'Cognitum.Dominio.Mensajeria.TipoMensajeriaEnum'
	                },
	                {
	                    fieldLabel: 'Accion',
	                    name: 'AccionMensajeria',
	                    xtype: 'enum.combo',
	                    enumName: 'Cognitum.Dominio.Mensajeria.AccionMensajeriaEnum'
	                },
	                {
	                    fieldLabel: 'Estatus Solicitud',
	                    name: 'EstatusSolicitud',
	                    xtype: 'enum.combo',
	                    enumName: 'Cognitum.Dominio.Mensajeria.EstatusSolicitudEnum',
	                    disabled: true
	                }, {
	                    fieldLabel: 'Incluye Doctos.',
	                    name: 'IncluyeDoctos',
	                    xtype: 'checkbox'
	                },
	                {
	                    fieldLabel: 'Indicaciones',
	                    name: 'Indicaciones',
	                    xtype: 'textarea',
	                    allowBlank: true
	                },
	                {
	                    fieldLabel: 'Observaciones',
	                    name: 'Observaciones',
	                    xtype: 'textarea',
	                    allowBlank: true,
	                    disabled: true
	                },
	                {
	                    fieldLabel: 'Estatus',
	                    name: 'Estatus',
	                    xtype: 'enum.combo',
	                    enumName: 'Cognitum.Dominio.Aplicacion.EstatusEnum',
	                    hidden: true,
	                    hideLabel: true
}]
                    , updateControls: function(value) {
                        if (Ext.isEmpty(value)) {
                            return;
                        }
                        if (value.EstatusSolicitud != 0) {
                            this.disable();
                        }
                        return value;
                    }
                },
            {
                xtype: 'solmens.admin.frm',
                title: 'Administracion'
            }, {
                xtype: 'sec.editor',
                title: 'Seguridad'
            }, {
                xtype: 'aud.editor',
                title: 'Auditoria'
}]

            });
            Cognitum.Mensajeria.SolicitudMensajeria.Editor.superclass.initComponent.apply(
			this, arguments);
        },

        onExpand2: function(panel) {
            this.getForm().findField('Cliente').disable();
            this.getForm().findField('Contacto').disable();
            this.getForm().findField('DireccionEntrega').disable();
            this.getForm().findField('Cliente').container.up('div.x-form-item').setDisplayed(false);
            this.getForm().findField('Contacto').container.up('div.x-form-item').setDisplayed(false);
            this.getForm().findField('DireccionEntrega').container.up('div.x-form-item').setDisplayed(false);
        },

        onCollapse2: function(panel) {
            this.getForm().findField('Cliente').enable();
            this.getForm().findField('Contacto').enable();
            this.getForm().findField('DireccionEntrega').enable();
            this.getForm().findField('Cliente').container.up('div.x-form-item').setDisplayed(true);
            this.getForm().findField('Contacto').container.up('div.x-form-item').setDisplayed(true);
            this.getForm().findField('DireccionEntrega').container.up('div.x-form-item').setDisplayed(true);
        },

        check2: function(cmp, checked) {
            if (checked) {
                this.getForm().findField('Contacto').enable();
                this.getForm().findField('Contacto').container.up('div.x-form-item').setDisplayed(true);
            }
            else {
                this.getForm().findField('Contacto').disable();
                this.getForm().findField('Contacto').container.up('div.x-form-item').setDisplayed(false);
            }
        },

        getTBarDynamicControls: function(value) {
            if (value.Id > 0) {
                var cartaEntity = Karma.Core.ModuleManager.Instance.getEntity('Cartas');
                return [{
                    fn: cartaEntity.getMenuSolicitudMensajeria,
                    params: value.Id,
                    scope: cartaEntity
}];
                }
            },

            validateValue: function(value, operation) {
                if (PLOG.isDebugEnabled()) {
                    PLOG.debug('[SolicitudMensajeria.Editor.validateValue] <-');
                }

                //General
                if (!this.validaCampos(null, [value.Contacto, value.Cliente, value.DireccionEntrega],
                        ['Contacto', 'Cliente', 'DireccionEntrega'])) {
                    if ( this.validaCampos(null, [value.Cliente, value.DireccionEntrega],
                        ['Cliente', 'DireccionEntrega'] )
                        && !this.getForm().findField('chkPMoral').getValue() ) 
                        return true;
                    else if ( !this.validaCampos(null, [value.ContactoNoRegistrado, value.ClienteNoRegistrado, value.DireccionNoRegistrada],
                        ['ContactoNoRegistrado', 'ClienteNoRegistrado', 'DireccionNoRegistrada']) )
                        return false;
                    else
                        return true;
                } else 
                    return true;

                if (PLOG.isDebugEnabled()) {
                    PLOG.debug('[SolicitudMensajeria.Editor.validateValue] ->');
                }
                return true;
            },

            getTBarCustomControls: function() {
                return [this.aceptarBtn = new Ext.Button({
                    text: 'Aceptar',
                    handler: this.onAceptar.createDelegate(this, ['DoAceptaSolicitud']),
                    scope: this
                }), this.rechazarBtn = new Ext.Button({
                    text: 'Rechazar',
                    handler: this.onAceptar.createDelegate(this, ['DoRechazaSolicitud']),
                    scope: this
                }), this.entragadoBtn = new Ext.Button({
                    text: 'Marcar Entregada',
                    handler: this.onEntregada.createDelegate(this, ['DoEntregaMensajeria']),
                    scope: this
                }), this.noEntregadoBtn = new Ext.Button({
                    text: 'No Entregada',
                    handler: this.onEntregada.createDelegate(this, ['DoNoEntregaMensajeria']),
                    scope: this
                }), this.cancelarBtn = new Ext.Button({
                    text: 'Cancelar',
                    handler: this.onPresionaXBoton.createDelegate(this, ['DoCancelaMensajeria']),
                    scope: this
                }), this.detenerBtn = new Ext.Button({
                    text: 'Detener',
                    handler: this.onPresionaXBoton.createDelegate(this, ['DoDetieneMensajeria']),
                    scope: this
                }), this.reprogramaBtn = new Ext.Button({
                    text: 'Reprogramar',
                    handler: this.onReprograma.createDelegate(this, ['DoReprogramaMensajeria']),
                    scope: this,
                    hidden: true
                })];
            },

            puedeAceptar: function(value) {
                if (this.isNew) {
                    return false;
                }
                return (value.EstatusSolicitud == 0) && this.entity.security.Update;
            },

            puedeEntregar: function(value) {
                return (value.EstatusSolicitud == 1 || value.EstatusSolicitud == 3 || value.EstatusSolicitud == 4) && this.entity.security.Update;
            },

            puedeCancelar: function(value) {
                return (value.EstatusSolicitud == 0 || value.EstatusSolicitud == 1 || value.EstatusSolicitud == 3 ||
                    value.EstatusSolicitud == 5 || value.EstatusSolicitud == 9) && this.entity.security.Update;
            },

            puedeDetener: function(value) {
                return (value.EstatusSolicitud == 1 || value.EstatusSolicitud == 3 || value.EstatusSolicitud == 9) && this.entity.security.Update;
            },

            puedeReprogramar: function(value) {
                return (value.EstatusSolicitud == 5) && this.entity.security.Update;
            },

            onLoad: function(value) {
                Cognitum.Mensajeria.SolicitudMensajeria.Editor.superclass.onLoad.apply(this, arguments);
            },

            updateControls: function(value) {
                Cognitum.Mensajeria.SolicitudMensajeria.Editor.superclass.updateControls.apply(this, arguments);

                !this.puedeAceptar(value) ? this.aceptarBtn.hide() : this.aceptarBtn.show();
                !this.puedeAceptar(value) ? this.rechazarBtn.hide() : this.rechazarBtn.show();
                !this.puedeEntregar(value) ? this.entragadoBtn.hide() : this.entragadoBtn.show();
                !this.puedeEntregar(value) ? this.noEntregadoBtn.hide() : this.noEntregadoBtn.show();
                !this.puedeCancelar(value) ? this.cancelarBtn.hide() : this.cancelarBtn.show();
                !this.puedeDetener(value) ? this.detenerBtn.hide() : this.detenerBtn.show();
                !this.puedeReprogramar(value) ? this.reprogramaBtn.hide() : this.reprogramaBtn.show();

            },

            onAceptar: function(method) {
                if (PLOG.isDebugEnabled()) {
                    PLOG.debug('[EditorBase.onRenovar] -');
                }
                Ext.Msg.show({
                    title: 'Precaución',
                    msg: 'Esta apunto de procesar la solicitud.',
                    buttons: Ext.Msg.YESNO,
                    fn: function(result) {
                        if (result === 'yes') {
                            this.doOperationWithParams(method, this.value.Id, {
                                fn: function(solicitud) {
                                    this.status.setStatus({
                                        text: 'La solicitud fue procesada existosamente.',
                                        iconCls: 'ok-icon',
                                        clear: true
                                    });
                                    this.updateControls(solicitud);
                                },
                                scope: this
                            });
                        }
                    },
                    animEl: 'elId',
                    icon: Ext.MessageBox.QUESTION,
                    scope: this
                });
            },

            onEntregada: function(method) {
                if (PLOG.isDebugEnabled()) {
                    PLOG.debug('[EditorBase.onRenovar] -');
                }
                Ext.Msg.show({
                    title: 'Precaución',
                    msg: 'Esta apunto de procesar la solicitud.',
                    buttons: Ext.Msg.YESNO,
                    fn: function(result) {
                        if (result === 'yes') {
                            this.doOperationWithParams(method, this.value.Id, {
                                fn: function(solicitud) {
                                    this.status.setStatus({
                                        text: 'La solicitud fue procesada existosamente.',
                                        iconCls: 'ok-icon',
                                        clear: true
                                    });
                                    this.updateControls(solicitud);
                                    this.getForm().findField('Observaciones').enable();
                                    Ext.MessageBox.alert('Exito', 'La solicitud fue procesada existosamente, agregue observaciones de ser necesario.', function() {
                                        //this.entity.openPoliza(solicitud);
                                    }, this);
                                },
                                scope: this
                            });
                        }
                    },
                    animEl: 'elId',
                    icon: Ext.MessageBox.QUESTION,
                    scope: this
                });
            },

            onPresionaXBoton: function(method) {
                if (PLOG.isDebugEnabled()) {
                    PLOG.debug('[EditorBase.onRenovar] -');
                }
                Ext.Msg.show({
                    title: 'Precaución',
                    msg: 'Esta apunto de procesar la solicitud.',
                    buttons: Ext.Msg.YESNO,
                    fn: function(result) {
                        if (result === 'yes') {
                            this.doOperationWithParams(method, this.value.Id, {
                                fn: function(solicitud) {
                                    this.status.setStatus({
                                        text: 'La solicitud fue procesada existosamente.',
                                        iconCls: 'ok-icon',
                                        clear: true
                                    });
                                    this.updateControls(solicitud);
                                    this.getForm().findField('Observaciones').enable();
                                    Ext.MessageBox.alert('Exito', 'La solicitud fue procesada existosamente, agregue observaciones de ser necesario.', function() {
                                        //this.entity.openPoliza(solicitud);
                                    }, this);
                                },
                                scope: this
                            });
                        }
                    },
                    animEl: 'elId',
                    icon: Ext.MessageBox.QUESTION,
                    scope: this
                });
            },

            onReprograma: function(method) {
                if (PLOG.isDebugEnabled()) {
                    PLOG.debug('[EditorBase.onRenovar] -');
                }
                Ext.Msg.show({
                    title: 'Precaución',
                    msg: 'Esta apunto de Reprogramar la solicitud.',
                    buttons: Ext.Msg.YESNO,
                    fn: function(result) {
                        if (result === 'yes') {
                            this.doOperationWithParams(method, this.value.Id, {
                                fn: function(solicitud) {
                                    this.status.setStatus({
                                        text: 'La solicitud fue reprogramada existosamente.',
                                        iconCls: 'ok-icon',
                                        clear: true
                                    });
                                    this.updateControls(solicitud);
                                    this.getForm().findField('Observaciones').enable();
                                    this.getForm().findField('DireccionEntrega').enable();
                                    this.getForm().findField('Contacto').enable();
                                    this.getForm().findField('Cliente').enable();
                                    this.getForm().findField('DireccionNoRegistrada').enable();
                                    this.getForm().findField('ContactoNoRegistrado').enable();
                                    this.getForm().findField('ClienteNoRegistrado').enable();
                                    this.find('title', 'Cliente NO Registrado')[0].enable();
                                    Ext.MessageBox.alert('Exito', 'La solicitud fue procesada existosamente, modifique y guarde los nuevos datos de la solicitud.', function() {
                                        //this.entity.openPoliza(solicitud);
                                    }, this);
                                },
                                scope: this
                            });
                        }
                    },
                    animEl: 'elId',
                    icon: Ext.MessageBox.QUESTION,
                    scope: this
                });
            },

            validaCampos: function(propertyName, campos, propiedades) {
                var flag = true;
                Ext.each(campos, function(campo, index) {
                    if (Ext.isEmpty(campo)) {
                        flag = false;
                        if (!Ext.isEmpty(propertyName))
                            this.getForm().findField(propertyName + '.' +
					    propiedades[index]).markInvalid('El campo ' + propiedades[index] +
					    ' es mandatorio.');
                        else
                            this.getForm().findField(propiedades[index]).markInvalid('El campo ' + propiedades[index] +
					    ' es mandatorio.');
                    }
                }, this);
                return flag;
            }

        });

Ext.reg('solmens.editor', Cognitum.Mensajeria.SolicitudMensajeria.Editor);
